home *** CD-ROM | disk | FTP | other *** search
/ NetNews Offline 2 / NetNews Offline Volume 2.iso / news / comp / lang / c-part1 / 7337 < prev    next >
Encoding:
Internet Message Format  |  1996-08-05  |  2.2 KB

  1. Path: solon.com!not-for-mail
  2. From: swedecj@vcnet.com (Carl Jacobson)
  3. Newsgroups: comp.lang.c.moderated,comp.lang.c
  4. Subject: Re: Please help me elect rounding of int division
  5. Date: 25 Feb 1996 12:00:27 -0600
  6. Organization: Internet Access of Ventura County 805.383.3500
  7. Sender: clc@solutions.solon.com
  8. Approved: clc@solutions.solon.com
  9. Message-ID: <4gq83r$omb@solutions.solon.com>
  10. References: <4gfaif$1tt@solutions.solon.com> <4ggf1m$8rb@solutions.solon.com>
  11. NNTP-Posting-Host: solutions.solon.com
  12. X-Newsreader: Forte Free Agent 1.0.82
  13.  
  14. xmsb@shadow.borland.com (Maurice S. Barnum) wrote:
  15.  
  16. >swedecj@vcnet.com (Carl Jacobson) writes:
  17.  
  18. >>Please help me solve this task.
  19.  
  20. >>I have now tried (Borland C++ version 3.0) for two solid days to write
  21. >>a function that would allow me to round the quotient of (a/b) up or
  22. >>down based on the "nearest" integer instead of being truncated to the
  23. >>smallest. If exactly half way, return the "odd."
  24.  
  25. >    post what you have written so far.
  26.  
  27. > --xmsb
  28.  
  29. It took a long time for my article to get posted, sooo I finally wrote
  30. the function as follows. It may be the long way around the barn, but
  31. it works OK. I'm sure there are much better ways to handle the
  32. quation.
  33.  
  34. long div_numbers(long a, long b) /* function header               */
  35. {
  36. long q=0;
  37. int neg=0;
  38.  
  39.    if (a<0 && b<0) {             /* account for negative integers */
  40.       a=abs(a);                  /* by making them positive in    */
  41.       b=abs(b);                  /* support of proper rounding    */
  42.       neg=0;;
  43.       }
  44.    if (a<0 || b<0) {
  45.       a=abs(a);
  46.       b=abs(b);
  47.       neg=1;
  48.       }
  49.  
  50.          q=a/b;                   /* find quotient                */
  51.                                   
  52.          if (((a%b)*100)>(b*50))  /* proper rounding routine      */
  53.                q++;
  54.          if (((a%b)*100)==(b*50)&&(q%2==0))
  55.                q++;
  56.  
  57.          if (neg==1) q=-q;        /* flip back to neg quotient    */
  58.                                   /* if required                  */
  59.      return(q);
  60. }
  61.  
  62. Thank you for your attention.
  63.  
  64. Carl J.
  65.  
  66. ---------------------------------------------------------------
  67. Carl Jacobson                          swedecj@vcnet.com
  68. P.O. Box 3607                          Phone: US 805.523.1724
  69. Thousand Oaks, CA 91359                Fax  : US 805.523.1454
  70.